package storage;

import java.sql.*;

/**
 * Developed for NTT - All is an Entity
 * Classe per interfacciarsi con il DB
 * 
 * @author Alessandro Pollace
 * @version 0.1
 */
public class DBConnect {

    /**
     *  La connessione col Database
     */
    private Connection db;
    /**
     * Istanza del pool di connesioni
     */
    private ConnectionPool pool;

    /**
     * Costruttotr
     * @throws Exception Errore nell'istanziazione del connection pool
     */
    protected DBConnect() throws Exception {
        this.pool = new ConnectionPool();
    }

    /**
     * Apre la connessione con il database
     * @throws Exception Errore nell'apertura della connessione
     */
    protected void openConnection() throws Exception {
        this.db = this.pool.getConnection();
    }

    /**
     * Chiude la connessione al database
     * @throws Exception Errore nella chiusura del DB
     */
    protected void closeConnection() throws Exception {
        this.pool.relaseConnection(this.db);
    }

    /**
     * esegue la query e restituisce i risultati sotto forma di array di Entity
     *
     * @param query
     *            la query da eseguide
     * @return matrice di ritorno dei risultati
     *
     * @exception Impossibile eseguire la query
     */
    protected ResultSet exeQuery(String query) throws Exception {
        // DATA

        Statement st;
        ResultSet rs = null;
        // OPERATION
        try {
            st = this.db.createStatement();
        } catch (SQLException e) {
            throw new Exception("Error-DBCOnnect-exeQuery-CreateStatementError");
        }
        try {
            query = query.trim();
            if ((query.charAt(0) == 'S') || query.charAt(0) == 's') {
                rs = st.executeQuery(query);
                int pippo = 5;
            } else {
                st.executeUpdate(query);
            }
        } catch (SQLException e) {
            throw new Exception("Error-DBCOnnect-exeQuery-ResultSetError : " + e.getMessage());
        }

        return rs;
    }
}
